package org.ala.tiktools.rpc.plugin.load_balance.selector;

import java.util.List;

import org.ala.tiktools.rpc.plugin.node.INode;
import org.ala.tiktools.rpc.plugin.node.NodeKey;

/**
 * 选择器逻辑
 *
 * @author ala
 * @date 2025-04-07 13:26
 */
public interface ISelector {
    /**
     *  空值
     */
    public static ISelector NULL = new ISelector() {
        @Override
        public INode select(List<INode> nodes) {
            return null;
        }
        @Override
        public void rtt(NodeKey key, long rtt) {
        }
    };


    /**
     *  选择Node
     *  <p> select全程无锁，node可能在选择的过程中变化。需要自行处理
     *  @param nodes    可用的活跃node列表
     */
    INode select(List<INode> nodes);
    /**
     *  上报延迟
     */
    void rtt(NodeKey key, long rtt);
}
